//
//  XFBaseController.h
//  MYManager
//
//  Created by ukongm on 17/7/4.
//  Copyright © 2017年 ukongm. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "XFActiveManager.h"
#import "MJRefresh.h"

//导航文字大小
static CGFloat const NAVI_TITLE_FONT = 17;
/** toolbar的安全距离 */
static CGFloat const TOOLBAR_SAFE_GAP = 34;
///** 导航的安全距离 */
static CGFloat const NAVI_SAFE_GAP = 44;

/**
 监听了键盘的出现和消失回调的事件
 */
@protocol XFSuperKeyboradDelegate <NSObject>

@optional
/**
 键盘出现
 
 @param keyboradHeight 键盘的高度
 */
- (void)keyboradShowComplateAtHeight:(CGFloat)keyboradHeight andAnimationTime:(CGFloat)time;

/**
 键盘消失
 */
- (void)keyboradHideComplateAtAnimationTime:(CGFloat)time;

@end

@interface MYBaseController : UIViewController<RequestDelegate,UITableViewDelegate,UITableViewDataSource,XFSuperKeyboradDelegate>

#pragma mark - 键盘相关
/**
 注册通知中心，监听键盘的出现和消失，通过代理回调。 这个方法在页面将要消失的方法被释放，
 
 这个方法推荐在页面将要显示的方法中调用
 */
- (void)registerKeyboradShowAndHide;

/** 是否开启键盘弹出，tableView的height就自动减少
 !!!!必须以上面的方法注册，才有用
 这个方法不能适配所有tableView的位置
 */
@property(nonatomic,assign)BOOL autoTableViewHeight;

#pragma mark - 其他
/** 是否是主页 */
@property(nonatomic,assign)BOOL home;

#pragma mark - 活动视图
/** 活动视图 */
@property(nonatomic,strong)XFActiveManager* activeManager;

#pragma mark - 列表相关
/** 是否可以刷新加载 */
@property(nonatomic,assign)BOOL refresh;
/** 刷新 */
@property(nonatomic,assign)BOOL headRefresh;
/** 加载 */
@property(nonatomic,assign)BOOL footRefresh;
/** 是否正在加载 */
@property(nonatomic,assign)BOOL downloading;
/** 加载的页数 */
@property(nonatomic,assign)NSInteger page;

/** 列表视图 */
@property(nonatomic,strong)UITableView* tableView;

/** 刷新加载视图 */
/** 刷新加载视图 */
@property(nonatomic,strong)MJRefreshHeader* header;
@property(nonatomic,strong)MJRefreshFooter* footer;
- (void)refreshBegin:(MJRefreshComponent*)component;


#pragma mark - 请求回调相关

- (void)succeedForSuccess:(NSDictionary *)dict mark:(NSString *)mark;

- (void)succeedForFail:(NSDictionary*)dict mark:(NSString*)mark;


#pragma mark - 界面跳转相关
- (void)goBack;

#pragma mark - 导航相关

- (void)navigationRightItem:(UIBarButtonItem*)rightItem;

- (void)navigationLeftItem:(UIBarButtonItem*)leftItem;

- (void)navigationLeftItem:(UIBarButtonItem*)leftItem rightItem:(UIBarButtonItem*)rightItem;

- (void)navigationRightItems:(NSArray<UIBarButtonItem*>*)rightItems;

- (void)navigationLeftItems:(NSArray<UIBarButtonItem*>*)leftItems;

- (void)navigationLeftItems:(NSArray<UIBarButtonItem*>*)leftItems rightItems:(NSArray<UIBarButtonItem*>*)rightItems;

- (void)navigationLeftItemTitle:(NSString*)title image:(NSString*)imageName
                         target:(id)target action:(SEL)action;

- (void)navigationRightItemTitle:(NSString*)title image:(NSString*)imageName
                          target:(id)target action:(SEL)action;

- (void)navigationRightItemTitle:(NSString*)title image:(NSString*)imageName
                          target:(id)target action:(SEL)action frame:(CGRect)frame;

- (void)navigationLeftItemTitle:(NSString*)title image:(NSString*)imageName
                         target:(id)target action:(SEL)action frame:(CGRect)frame;

- (void)navigationItemTitle:(NSString*)title image:(NSString*)imageName
                     target:(id)target action:(SEL)action frame:(CGRect)frame left:(BOOL)left;


#pragma mark - 导航以及toolbar高度，适配x
/** 导航高度 */
@property(nonatomic,assign)CGFloat naviHeight;
/** 工具栏高度 */
@property(nonatomic,assign)CGFloat toolHeight;

/** 导航的安全偏移 */
@property(nonatomic,assign)CGFloat naviSafeGap;
/** tabbar的安全偏移 */
@property(nonatomic,assign)CGFloat tabSafeGap;

/** 以后的self.view */
@property(nonatomic,strong)UIView* contentView;

//给自带的tableView添加约束，和contentView大小一致，前提是必须要添加上俯视图之后调用
- (void)resumeTableView;

@end
